iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

解題程式碼

var canArrange = function (arr, k) {
  const remainMap = new Map();

  for (let i = 0; i < arr.length; i++) {
    let remain = ((arr[i] % k) + k) % k;
    remainMap.set(remain, (remainMap.get(remain) || 0) + 1);
  }

  for (let i = 1; i <= Math.floor(k / 2); i++) {
    if ((remainMap.get(i) ?? 0) !== (remainMap.get(k - i) ?? 0)) return false;
  }

  return (remainMap.get(0) ?? 0) % 2 === 0;
};

解題思路、演算法

留意一些測資:

arr = [0,3]、k = 6
arr = [-1,1,-2,2,-3,3,-4,4]、k = 3
arr = [2,2,2,2,2,2]、k = 3

可以先把除以 k 後的餘數都存到 hashMap 裡面,接著第二次迴圈時我們找出所有可能兩個數相加後等於 k 的組合,

若發現數字 i 和 k - i 出現的次數不同,則代表無法組出題目要的 pair(每個 pair 的 sum 要可以被 k 整除),

另外根據提示,留意 i === k - i 和 i === 0 的 case:

i === k - i 在更精簡的解法可以不用考慮,

i === 0 的 case,若 0 出現奇數個,代表最後會剩下一個 0 無法配對,回傳 false

解法的時間、空間複雜度

時間複雜度: O(n)
空間複雜度: O(n)

參考資料

Yes


上一篇
724. Find Pivot Index
下一篇
92. Reverse Linked List II
系列文
向 NeetCode、官神看齊! 分享自己的解題筆記和影片。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言